package com.mlh.linkedlist;

import java.util.ArrayList;
import java.util.List;

//给你一个链表的头节点 head 和一个整数 val ，请你删除链表中所有满足 Node.val == val 的节点，并返回 新的头节点 。
public class RemoveElements {
	public static void main(String[] args) {
		int[]val=new int[]{1,2,6,3,4,5,6};
		ListNode head = ListNode.createLinkedList(val);
		ListNode listNode = method1(head, 6);
		ListNode.show(listNode);
	}
    //思路：不能判断当前节点来删除节点，需要去判断下一节点来删除下一节点
	//如果当前节点是最后一个节点，且符合val的要求就没办法删除
	public static ListNode method1(ListNode head, int val) {
		ListNode temp=new ListNode();
		//确定头结点  寻找满足val！=val的头结点
		while (head!=null&&head.val==val){
			head=head.next;
		}
		//防止头结点为null
		temp.next=head;
		while (temp.next!=null){
			if(temp.next.val==val){
				temp.next=temp.next.next;
			}else{
				temp=temp.next;
			}
		}
		return head;
	}

	//第二种方法写法比较简洁，和leetcode标准答案一样
	public static ListNode method2(ListNode head, int val){
		ListNode temp = new ListNode();
		temp.next=head;
		ListNode newHead=temp;
		while (temp.next!=null){
			if(temp.next.val==val){
				temp.next=temp.next.next;
			}else{
				temp=temp.next;
			}
		}
		return newHead.next;
	}

}
